[TDR List表][Java SDK]扫描全表数据

1. 接口说明

扫描指定的表格中的数据。

2. 版本要求

无特殊要求,所有版本都提供了该接口。

3. 准备工作

参见准备工作文档,完成使用该接口前的准备工作,并创建TDR List表

准备工作完成后,将会获得以下信息,这些信息在使用SDK时会被用到:

  1. 目录服务器地址列表
  2. 业务ID
  3. 业务访问密码
  4. 游戏区ID
  5. 数据表名

4. 示例代码

示例代码的基本执行过程:

  1. 创建客户端;
  2. 构建请求;
  3. 发送请求;
  4. 处理响应;
  5. 销毁客户端。

4.1. 同步调用示例代码

import com.tencent.tcaplus.client.Client;
import com.tencent.tcaplus.client.ClientFactory;
import com.tencent.tcaplus.client.ListTableTraverser;
import com.tencent.tcaplus.client.Record;
import com.tencent.tcaplus.client.Request;
import com.tencent.tcaplus.client.Response;
import com.tencent.tdr.tcaplus_protocol_cs.TcaplusProtocolCsConstants;

import java.util.ArrayList;
import java.util.List;

public class Example {

    public static void main(String[] arguments) {
        // 1. 准备环境信息
        // 1.1. 目录服务地址列表
        List<String> dirList = new ArrayList<String>();
        dirList.add("tcp://x.x.x.x:9999");
        dirList.add("tcp://y.y.y.y:9999");
        // 1.2. 业务ID
        int appId = 1;
        // 1.3. 业务密码
        String appPassword = "****************";
        // 1.4. 表格组ID
        int tableGroupId = 1;
        // 1.5. 表格名称
        String tableName = "test";

        // 2. 创建客户端
        Client client = ClientFactory.createClient(appId, tableGroupId, appPassword, dirList);
        try {
            // 3. 构造根据部分Key字段值读取数据的请求
            // 3.1. 创建1个扫描器
            ListTableTraverser traverser = client.getListTableTraverser();
            // 3.2. 设置目标表名。注意:目标表必须为List表
            traverser.setTableName(tableName);
            // 3.3. 添加需要读取的Value字段
            traverser.addFieldName("typeid");
            traverser.addFieldName("Data");
            traverser.addFieldName("uname");

            // 4. 启动扫描器
            Iterator<Record> iterator = traverser.start();

            // 5. 循环从迭代器中获取数据,直到读完所有数据
            while (iterator.hasNext()) {
                Record result = iterator.next();
                // TODO 在此添加处理返回数据的代码
            }
        } finally {
            // 6. 销毁客户端对象
            ClientFactory.destroyClient(client);
        }
    }

4.2. 异步调用示例代码

import com.tencent.tcaplus.client.Client;
import com.tencent.tcaplus.client.ClientFactory;
import com.tencent.tcaplus.client.ListTableTraverser;
import com.tencent.tcaplus.client.Record;
import com.tencent.tcaplus.client.Request;
import com.tencent.tcaplus.client.Response;
import com.tencent.tdr.tcaplus_protocol_cs.TcaplusProtocolCsConstants;

import java.util.ArrayList;
import java.util.List;

public class Example {

    public static void main(String[] arguments) {
        // 1. 准备环境信息
        // 1.1. 目录服务地址列表
        List<String> dirList = new ArrayList<String>();
        dirList.add("tcp://x.x.x.x:9999");
        dirList.add("tcp://y.y.y.y:9999");
        // 1.2. 业务ID
        int appId = 1;
        // 1.3. 业务密码
        String appPassword = "****************";
        // 1.4. 表格组ID
        int tableGroupId = 1;
        // 1.5. 表格名称
        String tableName = "test";

        // 2. 创建客户端
        Client client = ClientFactory.createClient(appId, tableGroupId, appPassword, dirList);
        try {
            // 3. 构造根据部分Key字段值读取数据的请求
            // 3.1. 创建1个扫描器
            ListTableTraverser traverser = client.getListTableTraverser();
            // 3.2. 设置目标表名。注意:目标表必须为List表
            traverser.setTableName(tableName);
            // 3.3. 添加需要读取的Value字段
            traverser.addFieldName("typeid");
            traverser.addFieldName("Data");
            traverser.addFieldName("uname");

            CountDownLatch latch = new CountDownLatch(1);

            // 4. 异步启动扫描器,并指定返回结果处理器
            traverser.startAsync(new Future() {

                @Override
                public void onResponse(Response response) {
                    // 5. 处理结果
                    if (response.getResult() == 0) {
                        for (Record result : response.getRecordList()) {
                            // TODO 可在此处添加处理数据代码
                        }
                    }
                    if (response.isTraverseCompleted()) {
                        latch.countDown();
                    }
                }

            });

            latch.await();
        } finally {
            // 6. 销毁客户端对象
            ClientFactory.destroyClient(client);
        }
    }

5. 用户获取遍历器对象方法说明

注:如有未列出来的Client对象方法,即表示该方法在扫描数据的场景下是无效的。

方法签名 方法说明
ListTableTraverser getListTableTraverser() 创建扫描器对象,后续的扫描动作都通过该对象完成。

6. 遍历器对象方法说明

注:如有未列出来的ListTableTraverser对象方法,即表示该方法在扫描数据的场景下是无效的。

方法签名 方法说明
Traverser setTableName(String tableName) 设置目标表名。tableName:目标表名,不能为null。
void addFieldName(String fieldName) 添加需要查询的数据的Value字段的名称。fieldName:Value字段名,不能为null。
Iterator<Record> start() 启动扫描器,并获取数据迭代器。

7. 数据迭代器中获取的数据对象对象方法说明

注:如有未列出来的Record对象方法,即表示该方法在扫描数据的场景下是无效的。

方法签名 方法说明
int getVersion() 获取数据的版本号。
int getValueCount() 获取数据的Value字段的个数。
byte getValueByte(String fieldName) 获取指定名称的Value字段的值。fieldName:字段名称,不可为null。
short getValueShort(String fieldName) 获取指定名称的Value字段的值。fieldName:字段名称,不可为null。
int getValueInt(String fieldName) 获取指定名称的Value字段的值。fieldName:字段名称,不可为null。
long getValueLong(String fieldName) 获取指定名称的Value字段的值。fieldName:字段名称,不可为null。
float getValueFloat(String fieldName) 获取指定名称的Value字段的值。fieldName:字段名称,不可为null。
double getValueDouble(String fieldName) 获取指定名称的Value字段的值。fieldName:字段名称,不可为null。
String getValueString(String fieldName) 获取指定名称的Value字段的值。fieldName:字段名称,不可为null。
byte[] getValueBlob(String fieldName) 获取指定名称的Value字段的值。fieldName:字段名称,不可为null。

8. 常见问题

详见错误码含义和处理方法

9. 其它参考文档

[TDR List表][C++ SDK]遍历表数据接口说明

[TDR List表][Go SDK]扫描全表数据接口说明

results matching ""

    No results matching ""